use opencv::{core::Mat, highgui, imgproc, prelude::*, videoio, Result};
// 读取、显示摄像头视频
pub fn run() -> Result<()>{
    let window = "video capture";
	// 创建和操作可以显示图像并记住其内容的窗口
	highgui::named_window(window, highgui::WINDOW_AUTOSIZE).unwrap();
	// 打开摄像机
	let mut cam = videoio::VideoCapture::new(0, videoio::CAP_ANY).unwrap();
	// 判断相机是否打开
	if videoio::VideoCapture::is_opened(&cam).unwrap() {
		eprintln!("摄像机已打开！");
	}
	loop {
		let mut frame = Mat::default();		// 一个 n 维密集数字单通道或多通道数组
		// 捕获帧
		if let Err(_e) = cam.read(&mut frame) {
			break;
		}

		if frame.size().unwrap().width > 0 {
			// 置灰
			let mut gray = Mat::default();
			imgproc::cvt_color(&frame, &mut gray, imgproc::COLOR_BGR2GRAY, 0)?;
			// 打开窗口
			highgui::imshow(window, &gray).unwrap();
		}
		// 等待用户按键，监听键盘动作
		if let Ok(key) = highgui::wait_key(10){
			if key > 0 {
				highgui::destroy_all_windows().unwrap();
				cam.release().unwrap();
				break;
			}
		}
	}
    Ok(())
}